# 指定CMake最低版本要求
cmake_minimum_required(VERSION 3.14)
# 设置项目名称和版本，指定使用C++
project(QtWidgetApplication VERSION 0.1 LANGUAGES CXX)

# Qt特定的自动配置
set(CMAKE_AUTOUIC ON)      # 自动处理.ui文件
set(CMAKE_AUTOMOC ON)      # 自动处理Q_OBJECT宏
set(CMAKE_AUTORCC ON)      # 自动处理.qrc资源文件

# C++标准设置
set(CMAKE_CXX_STANDARD 17)                 # 使用C++17标准
set(CMAKE_CXX_STANDARD_REQUIRED ON)        # 强制要求C++17
set(CMAKE_CXX_EXTENSIONS OFF)              # 不使用编译器特定扩展

# 包含当前目录
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# 设置可执行文件输出路径
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin)          # 通用配置
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/../bin)    # Debug配置
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/../bin)  # Release配置

# 查找Qt包
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets SerialPort)   # 首先查找Qt6，然后是Qt5
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets SerialPort)  # 查找具体组件

# 设置源文件
set(PROJECT_SOURCES
    main.cpp
    qt_widget_application.cpp
    qt_widget_application.h
)

# Qt6和Qt5的不同处理方式
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(QtWidgetApplication         # Qt6使用新的函数
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
else()
    add_executable(QtWidgetApplication           # Qt5使用传统方式
        ${PROJECT_SOURCES}
    )
endif()

# 链接Qt库
target_link_libraries(QtWidgetApplication PRIVATE 
    Qt${QT_VERSION_MAJOR}::Widgets 
    Qt${QT_VERSION_MAJOR}::SerialPort
)

# MacOS特定配置
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.QtWidgetApplication)
endif()

# 设置目标属性
set_target_properties(QtWidgetApplication PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

# Qt6特定的最终处理
if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(QtWidgetApplication)
endif()